package com.cjx.stars.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cjx.stars.common.Response;
import com.cjx.stars.pojo.request.TeamCoverUpdateRequest;
import com.cjx.stars.pojo.table.Team;
import com.cjx.stars.pojo.request.JoinTeam;

/**
* @author cjx
* @description 针对表【team(队伍)】的数据库操作Service
* @createDate 2024-03-16 17:26:32
*/
public interface TeamService extends IService<Team> {

    /**
     * 创建队伍
     * @param team
     * @return
     */
    Response<?> addTeam(Team team);

    /**
     * 查询队伍
     * @param searchText
     * @param status
     * @param currentPage
     * @return
     */
    Response<?> getTeamList(String searchText, int status, int currentPage);

    /**
     * 查询自己创建的队伍
     * @param searchText
     * @param currentPage
     * @return
     */
    Response<?> getMyCreateTeamList(String searchText, int currentPage);

    /**
     * 根据队伍id查询队伍详情
     * @param teamId 队伍id
     * @return
     */
    Response<?> queryTeam(Long teamId);

    /**
     * 加入队伍
     * @param teamId 队伍Id
     * @param password 队伍密码
     * @return 返回信息
     */
    Response<?> joinTeam(JoinTeam joinTeam);

    /**
     * 退出队伍
     * @param teamId 队伍id
     * @return 返回信息
     */
    Response<?> quitTeam(Long teamId);

    /**
     * 解散队伍（删除队伍）
     * @param teamId 队伍id
     * @return 返回信息
     */
    Response<?> deleteTeam(Long teamId);

    /**
     * 获取队伍成员信息
     * @param teamId 队伍id
     * @return 成员信息
     */
    Response<?> getMember(Long teamId);

    /**
     * 将用户踢出队伍
     * @param teamId 队伍id
     * @param userId 用户id
     * @return 返回信息
     */
    Response<?> kickUser(Long teamId, Long userId);

    /**
     * 更改队伍信息
     * @param safeTeam 更改的队伍信息
     * @return 返回信息
     */
    Response<?> teamUpdate(Team team);

    /**
     * 查询我加入的队伍
     * @param searchText 查询关键字
     * @param currentPage 分页数据
     * @return 队伍信息
     */
    Response<?> myJoinTeam(String searchText, int currentPage);

    /**
     * 自己加入的所有队伍信息
     * @return 队伍信息
     */
    Response<?> myJoinTeams();

    /**
     * 更新封面图片
     * @param teamCoverUpdateRequest 更新封面图片请求
     */
    void changeCoverImage(TeamCoverUpdateRequest teamCoverUpdateRequest);
}
